package com.sky.service.impl;

import com.sky.entity.Orders;
import com.sky.mapper.ReportMapper;
import com.sky.service.ReportService;
import com.sky.vo.TurnoverReportVO;
import com.sky.vo.UserReportVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.*;

/**
 * ClassName: ReportServiceImpl
 * Package: com.sky.service.impl
 * Description:
 *
 * @Author 八云
 * @Create 2025/3/26 21:19
 * @Version 1.0
 */

/**
 * 为了减少多次查询数据库，代码过于复杂
 */

//
//@Service
//public class ReportServiceImpl_bak implements ReportService {
//
//    @Autowired
//    private ReportMapper reportMapper;
//
//    /**
//     * 营业额统计
//     *
//     * @param begin
//     * @param end
//     * @return
//     */
//    @Override
//    public Object turnoverStatistics(LocalDate begin, LocalDate end) {
//        // 获取begin和end之间的所有日期
//        List<LocalDate> dateRange = begin.datesUntil(end.plusDays(1)).toList();
//        // 将日期范围转换为字符串列表
//        List<String> dateList = dateRange.stream()
//                .map(LocalDate::toString)
//                .toList();
//        // 合并成字符串，中间用逗号分隔
//        String dateStrings = String.join(",", dateList);
//
//        // 查询指定时间区间的每天订单金额
//        List<Map<String, Object>> list = reportMapper.turnoverStatistics(begin, end.plusDays(1), Orders.COMPLETED);
//
//        HashMap<Object, Object> hashMap = new HashMap<>();
//        // 合并map，key为时间，value为金额
//        for (Map<String, Object> map : list){
//            String key = (String) map.get("key");
//            BigDecimal value = (BigDecimal) map.get("value");
//            hashMap.put(key,value);
//        }
//
//        String amountStrings = "";
//        // 遍历日期范围，如果日期对应的金额不存在，则设置为0
//        for (String localDate : dateList) {
//            if (!hashMap.containsKey(localDate)) {
//                amountStrings=amountStrings+"0,";
//            }else {
//                amountStrings=amountStrings+hashMap.get(localDate)+",";
//            }
//        }
//
//        amountStrings.substring(0,amountStrings.length()-1);
//
//        System.out.println(dateStrings);
//        System.out.println(amountStrings);
//
//        TurnoverReportVO turnoverReportVO = TurnoverReportVO.builder().dateList(dateStrings).turnoverList(amountStrings).build();
//        return turnoverReportVO;
//    }
//
//    /**
//     * 用户统计
//     *
//     * @param begin
//     * @param end
//     * @return
//     */
//    @Override
//    public Object userStatistics(LocalDate begin, LocalDate end) {
//        // 获取begin和end之间的所有日期
//        List<LocalDate> dateRange = begin.datesUntil(end.plusDays(1)).toList();
//        // 将日期范围转换为字符串列表
////        List<String> dateList = dateRange.stream()
////                .map(LocalDate::toString)
////                .toList();
//        List<String> dateList = new ArrayList<>(dateRange.stream()
//                .map(LocalDate::toString)
//                .toList());
//        // 合并成字符串，中间用逗号分隔
//        String dateStrings = String.join(",", dateList);
//
//        // 查询指定时间区间的每天新增用户数和用户数总量
//        List<Map<String, Object>> list = reportMapper.userStatistics(begin, end.plusDays(1));
//        HashMap<Object, Object> newUserMap = new HashMap<>();
//        // 合并map，key为时间，value为金额
//        for (Map<String, Object> map : list){
//            String key = (String) map.get("key");
//            Long value = (Long) map.get("value");
//            newUserMap.put(key,value);
//        }
//
//        String newUserStrings = "";
//        // 遍历日期范围，如果日期对应的新增用户数不存在，则设置为0
//        for (String localDate : dateList) {
//            if (!newUserMap.containsKey(localDate)) {
//                newUserStrings=newUserStrings+"0,";
//            }else {
//                newUserStrings=newUserStrings+newUserMap.get(localDate)+",";
//            }
//        }
//        newUserStrings.substring(0,newUserStrings.length()-1);
//
//
//
//        // 反转日期范围
//        Collections.reverse(dateList);
//
//        // 查询最近一天总用户数
//        Long totalUser = reportMapper.userCount(end.plusDays(1));
//        String countUserStrings = ""+totalUser;
//        //
//        for (String localDate : dateList) {
//            // 如果存在，则减去新增用户数
//            if (newUserMap.containsKey(localDate)) {
//                // 减去新增用户数
//                totalUser=totalUser-(Long)newUserMap.get(localDate);
//                countUserStrings=totalUser+","+countUserStrings;
//            }else {
//                countUserStrings=totalUser+","+countUserStrings;
//            }
//        }
//        int firstCommaIndex = countUserStrings.indexOf(",");
//        countUserStrings = countUserStrings.substring(firstCommaIndex + 1);
//
//
//        System.out.println(dateStrings);
//        System.out.println(newUserStrings);
//        System.out.println(countUserStrings);
//
//        UserReportVO userReportVO = UserReportVO.builder().dateList(dateStrings).newUserList(newUserStrings).totalUserList(countUserStrings).build();
//        return userReportVO;
//    }
//
//    @Override
//    public Object ordersStatistics(LocalDate begin, LocalDate end) {
//        return null;
//    }
//}
